今天要來介紹的是.reg文件的寫法,要實作前請記得先做好備份喔!
這是當作給自己最後的作業,對登錄檔有熟悉感後,要學會寫.reg文件才算合格,其實這份文件也不難所以就用一篇的時間來研究這部分吧。
其實還有像是使用命令提示字元的REG指令,或是一些程式可以嵌入修改的函式等等方法,我們暫時不討論這部分,寫.reg檔是最快速方便的方法,他比起cmd指令可以一次整合指令好閱讀,而我們也不是寫什麼軟體需要在程式中更改登錄檔,學會這項技能可以看懂匯出的備份檔,也可以轉移檔案隨處隨用,甚至算是一個簡單的急救方法,因為常常有人誤刪登錄檔(例如刪除HKEY_CLASSES_ROOT.exe子鍵,這會失去.exe檔的開啟方式連結,造成.exe檔無法找到開啟方式),最後發生regedit.exe打不開無法改回登錄檔的情況,這個時候寫一份.reg文件執行他就可以了回復了。
所謂.reg文件大概長下列這樣,下面是當我把HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
子鍵匯出備份的樣子。
微軟官方則給出這樣的公式,我們用這張來說明簡單的語法標示:
\
)要用雙反斜線(\\
)表示,遇到雙引號(“
)需要用跳脫字元反斜線雙引號(\"
)表示。註解可以在句首使用分號(;),整行即被視為註解。
整份文件寫完最後應該留下一條空行(Blank line)。
REG_SZ類型也可以用hex(1)表示,但值需要用UTF-16LE表示,並用NUL結尾。而其實上述的hex值括號內的數字是各種資料類型的Type ID。
看完基礎的解說後,我們現在應該能做到新增和修改登錄值,往下我們在HKEY_CURRENT_USER\Control Panel\Desktop
子鍵下測試看看。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Control Panel\Desktop\Test1]
;這是註解1
[HKEY_CURRENT_USER\Control Panel\Desktop\Test2\Test22]
@="qwertyuiop"
"@"="qwertyuiop"
;這是註解2
"Test2Code1"=dword:00000010
"Test2Code2"=""
"Test2Code3"="test\\test\"test"
;這是註解3
註解1:本來沒有Test1這個子鍵,所以這行會建立它,然後下面沒有給登錄值所以只會看到數值未設定的REG_SZ預設值。
註解2:@可以設定預設值,但是加上雙引號則會視為登錄值名稱。
註解3:直接往下接兩個新子鍵也是可以的建立的,dword的給值會視為16進位,字串值為空時可直接打雙引號,反斜線和引號也可以標示。
如果要修改登錄值直接寫就會覆蓋掉原本的值,我們拿剛建立的Test22子鍵來測試看看:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Control Panel\Desktop\Test2\Test22]
"Test2Code1"=dword:000000a3
;這是註解1
"Test2Code2"=dword:00000011
;這是註解2
"Test2Code3"="aaaa"
"Test2Code3"="bbbb"
;這是註解3
"Test2Code4"=hex(2):61,00,62,00,63,00,00,00
;這是註解4
"Test2Code5"="我是字串"
;這是註解5
更改存檔編碼為UTF-16LE with BOM後,中文可正常顯示:
如果要刪除分支(子鍵及子鍵內的一切),直接在DataItemName的中括號內的開頭補上連字符(-),例如:[-HKEY_CURRENT_USER\Control Panel\Desktop\Test1]
,整個子鍵就會被刪除
如果要刪除各別登錄值,則直接在等號後接上連字符(-),如果要刪除預設值的內容,也就是恢復數值未設定的狀態就直接打@=-
如果要重新命名登錄值或是子鍵,作法就是刪除他再建立新的。
下面給些範例:
Windows Registry Editor Version 5.00
[-HKEY_CURRENT_USER\Control Panel\Desktop\Test1]
[HKEY_CURRENT_USER\Control Panel\Desktop\Test2\Test22]
@=-
;這是註解1
"Test2Code2"=-
;這是註解2
"Test2Code3"=-
;這是註解3
以上就是.reg文件寫法的基礎介紹,遇到不會寫的也可以匯出類似的登錄值,比對看看就大概看懂了,因為這份文件的格式不難,學會寫以後也多了一項奇怪的技能可以炫耀哈哈。
而且寫到這裡你可能會發現一件事,當我們把登錄檔匯出成.reg檔作為備份的時候,我們不能預測之後會新增什麼登錄檔,所以備份裡沒有刪除的指令,還原的時候新增過的登錄檔並不會刪除只會複寫舊的登錄檔,所以這樣的還原不完全,用系統還原點才會比較完整。
現在我們已經熟悉登錄檔的意義和操作原理,下篇我們會從軟體的安裝和反安裝來看程式對系統的讀寫操作,不只對登錄檔,還有各種大小文件的連結關係,對系統穩定性的影響。
參考資料:
https://forum.gamer.com.tw/C.php?bsn=60030&snA=528832
https://en.wikipedia.org/wiki/Windows_Registry
https://support.microsoft.com/en-us/topic/how-to-add-modify-or-delete-registry-subkeys-and-values-by-using-a-reg-file-9c7f37cf-a5e9-e1cd-c4fa-2a26218a1a23
https://www.twblogs.net/a/5d6d014ebd9eee5327ff0639